home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Experimental BBS Explossion 3
/
Experimental BBS Explossion III.iso
/
c
/
bc_pas_1.zip
/
INITHW.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-01-06
|
5KB
|
194 lines
/*$Author: DCODY $*/
/*$Date: 24 Sep 1992 08:49:42 $*/
/*$Header: X:/sccs/misc/inithw.c_v 1.4 24 Sep 1992 08:49:42 DCODY $*/
/*$Log: X:/sccs/misc/inithw.c_v $
*
* Rev 1.4 24 Sep 1992 08:49:42 DCODY
* changed MVGetHardware to mvGetHardware
*
* Rev 1.3 20 Jul 1992 11:45:58 DCODY
* changed mvGetHWVersion call to request relocatable I/O detection.
*
* Rev 1.2 17 Jul 1992 14:10:32 DCODY
* major re-write for new Pro Audio cards
*
* Rev 1.1 23 Jun 1992 16:33:12 DCODY
* PAS2 update
*
* Rev 1.0 15 Jun 1992 09:39:54 BCRANE
* Initial revision.
*/
/*$Logfile: X:/sccs/misc/inithw.c_v $*/
/*$Modtimes$*/
/*\
|*|----====< INITHW.C >====----
|*|
|*| This module initializes the Pro Audio Spectrum from a cold boot
|*|
|*| Copyright (c) 1991, Media Vision, Inc. All rights reserved.
|*|
\*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "state.h"
#include "mixers.h"
#include "binary.h"
#include "common.h"
#include "target.h"
/* initial volume control states */
static unsigned char volumes[6][2] = {
0, BI_VOLLOUD, /* 0% - switch off */
0, BI_VOLENHANCE, /* 0% - switch off */
50, BI_VOLBASS, /* 50% - sliding scale */
50, BI_VOLTREBLE, /* 50% - sliding scale */
45, BI_VOLLEFT, /* 45% - sliding scale */
45, BI_VOLRIGHT /* 45% - sliding scale */
};
static unsigned char mixersetting[16][3] = {
88, BI_INPUTMIXER, BI_L_FM, /* 88% of the sliding scale */
88, BI_INPUTMIXER, BI_R_FM, /* 88% of the sliding scale */
55, BI_OUTPUTMIXER, BI_L_IMIXER, /* 55% of the sliding scale */
55, BI_OUTPUTMIXER, BI_R_IMIXER, /* 55% of the sliding scale */
88, BI_INPUTMIXER, BI_L_EXT, /* 88% of the sliding scale */
88, BI_INPUTMIXER, BI_R_EXT, /* 88% of the sliding scale */
88, BI_INPUTMIXER, BI_L_INT, /* 88% of the sliding scale */
88, BI_INPUTMIXER, BI_R_INT, /* 88% of the sliding scale */
40, BI_INPUTMIXER, BI_L_MIC, /* 40% of the sliding scale */
40, BI_INPUTMIXER, BI_R_MIC, /* 40% of the sliding scale */
88, BI_INPUTMIXER, BI_L_PCM, /* 88% of the sliding scale */
88, BI_INPUTMIXER, BI_R_PCM, /* 88% of the sliding scale */
88, BI_INPUTMIXER, BI_L_SPEAKER, /* 88% of the sliding scale */
88, BI_INPUTMIXER, BI_R_SPEAKER, /* 88% of the sliding scale */
88, BI_INPUTMIXER, BI_L_SBDAC, /* 88% of the sliding scale */
88, BI_INPUTMIXER, BI_R_SBDAC /* 88% of the sliding scale */
};
/*\
|*|----====< int InitMVHardware( ) >====----
|*|
|*| This code initializes the ProAudio Spectrum mixer, volume,
|*| MIDI, FM, and PCM hardware to default states.
|*|
|*| Entry Conditions:
|*| None
|*|
|*| Exit Conditions:
|*| returns the hardware version of the card (currently 0)
|*|
\*/
int InitMVHardware()
{
int n,i,x,hv,hvbits;
int mvGetHWVersion(int);
/* determine the feature set of this board */
mvGetHWVersion(USE_ACTIVE_ADDR);
_asm {
mov hv,ax
mov hvbits,cx
}
/* blow off the interrupts */
MVOut (INTRCTLR, 0xFF,0x00);
/* take the board out of reset by writing a value to the filter */
MVOut(AUDIOFILT,0xFF,0x00);
/* set the cross channel to LEFT-TO-LEFT, RIGHT-TO-RIGHT & kill PCM */
MVOut (CROSSCHANNEL,0xFF, bCCl2l+bCCr2r);
/* initialize access to the mixers */
MVInitMixerCode(0);
/* initialize the volume device */
for (n=0;n<6;n++)
cMVSetVolumeFunction(volumes[n][0], volumes[n][1]);
/* initialize the input mixer for all channels */
for (n=0;n<16;n++)
cMVSetMixerFunction
(
mixersetting[n][0],
mixersetting[n][1],
mixersetting[n][2]
);
/* turn off the realsound switch */
cMVRealSoundSwitch (0,1);
/* set the FM into mono access mode, then flush them... */
cMVFMSplitSwitch (100,1);
for (n=0;n<256;n++) {
outp (0x388,n);
for(x=i=0;i<3;i++)
x += inp(0x388);
outp (0x389,0);
for(x=i=0;i<33;i++)
x += inp(0x388);
}
/* flush the MIDI interface */
if (hvbits & bMV101) {
MVOut(MIDIPRESCALE, 0xFF,0x00);
MVOut(MIDICONTROL, 0xFF,bMCRrstfifoi+bMCRrstfifoi);
MVOut(MIDICONTROL, 0xFF,0x00);
}
else {
MVOut(MDSYSCTLR,0xFF,0x80); // send a reset to the Yamaha
for(x=i=0;i<33;i++) // wait 80 microseconds
x += inp(0x388);
MVOut(MDSYSCTLR,0xFF,0x80); // clear the reset
}
/* take the board out of reset by writing a value to the filter */
cMVSetFilterFunction(100); /* set for no limiting */
/* return the hardware version # */
return (hv);
}
/*\
|*| end of INITHW.C
\*/